home *** CD-ROM | disk | FTP | other *** search
/ MacHack 2000 / MacHack 2000.toast / pc / The Hacks / MacHacksBug / Python 1.5.2c1 / Extensions / Imaging / PIL / XbmImagePlugin.py < prev    next >
Encoding:
Text File  |  2000-06-23  |  1.6 KB  |  76 lines

  1. #
  2. # The Python Imaging Library.
  3. # $Id: XbmImagePlugin.py,v 1.1.1.1 1998/08/18 13:07:52 sjoerd Exp $
  4. #
  5. # XBM File handling
  6. #
  7. # History:
  8. #    95-09-08 fl    Created
  9. #    96-11-01 fl    Added save support
  10. #    97-07-07 fl    Made header parser more tolerant
  11. #    97-07-22 fl    Fixed yet another parser bug
  12. #
  13. # Copyright (c) Secret Labs AB 1997.
  14. # Copyright (c) Fredrik Lundh 1996-97.
  15. #
  16. # See the README file for information on usage and redistribution.
  17. #
  18.  
  19. __version__ = "0.3"
  20.  
  21. import regex, string
  22. import Image, ImageFile
  23.  
  24. # XBM header
  25. xbm_head = regex.compile(
  26.     "#define[ \t]+[^_]*_width[ \t]+\([0-9]*\)[\r\n]+"
  27.     "#define[ \t]+[^_]*_height[ \t]+\([0-9]*\)[\r\n]+"
  28.     "[\000-\377]*_bits\[\]"
  29. )
  30.  
  31.  
  32. def _accept(prefix):
  33.     return prefix[:7] == "#define"
  34.  
  35.  
  36. class XbmImageFile(ImageFile.ImageFile):
  37.  
  38.     format = "XBM"
  39.     format_description = "X11 Bitmap"
  40.  
  41.     def _open(self):
  42.  
  43.     s = xbm_head.match(self.fp.read(512))
  44.  
  45.     if s > 0:
  46.  
  47.         xsize = string.atoi(xbm_head.group(1))
  48.         ysize = string.atoi(xbm_head.group(2))
  49.  
  50.         self.mode = "1"
  51.         self.size = xsize, ysize
  52.  
  53.         self.tile = [("xbm", (0, 0)+self.size, s, None)]
  54.  
  55.  
  56. def _save(im, fp, filename):
  57.  
  58.     if im.mode != "1":
  59.     raise IOError, "cannot write mode %s as XBM" % im.mode
  60.  
  61.     fp.write("#define im_width %d\n" % im.size[0])
  62.     fp.write("#define im_height %d\n" % im.size[1])
  63.     fp.write("static char im_bits[] = {\n")
  64.  
  65.     ImageFile._save(im, fp, [("xbm", (0,0)+im.size, 0, None)])
  66.  
  67.     fp.write("};\n")
  68.  
  69.  
  70. Image.register_open("XBM", XbmImageFile, _accept)
  71. Image.register_save("XBM", _save)
  72.  
  73. Image.register_extension("XBM", ".xbm")
  74.  
  75. Image.register_mime("XBM", "image/xbm")
  76.